// src/api/login.js
import axios from 'axios'

const service = axios.create({
  baseURL: '/api',
  timeout: 5000,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  retry: 3,
  retryDelay: 1000
})


// 请求拦截器（使用 Object.hasOwn）
service.interceptors.request.use(config => {
  // 可以在这里添加 token 或其他公共参数
  
  // 对于 post 请求，确保数据是 URL 编码格式
  if (config.method === 'post' && 
      config.headers['Content-Type'] === 'application/x-www-form-urlencoded') {
    if (typeof config.data !== 'string') {
      // 将对象转换为 URL 编码格式
      const params = new URLSearchParams()
      for (const key in config.data) {
        if (Object.hasOwn(config.data, key)) {
          params.append(key, config.data[key])
        }
      }
      config.data = params.toString()
    }
  }
  
  return config
}, error => {
  return Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(response => {
  // 在这里统一处理响应数据
  return response
}, async error => {
  const { config, response } = error
  
  // 如果配置不存在或状态码不是5xx或网络错误，则不重试
  if (!config || !response || response.status < 500) {
    return Promise.reject(error)
  }
  
  // 获取重试次数默认3次
  const retryCount = config.retry || 3
  
  // 当前重试次数
  config._retryCount = config._retryCount ? config._retryCount + 1 : 1
  
  // 如果已达到最大重试次数，拒绝请求
  if (config._retryCount > retryCount) {
    return Promise.reject(error)
  }
  
  // 计算延迟时间（指数增长）
  const delay = config.retryDelay || 1000
  await new Promise(resolve => setTimeout(resolve, delay * Math.pow(2, config._retryCount - 1)))
  
  // 重新发送请求
  return service(config)
})

const api = {
  login(data) {
    return service({
      url: '/staff/login',
      method: 'post',
      data: `uUsername=${data.username}&uPassword=${data.password}`
    })
  },
  
 register(data) {
  return service({
    url: '/staff/register',
    method: 'post',
    headers: {
      'Content-Type': 'application/json'
    },
    data:{
      uName: data.name,
      uUsername: data.username,
      uPassword: data.password,
      uCreateTime: data.createTime
    }
    
  })
},
  
  // 更新 getPosition 方法
  getPosition(username) {
    return service({
      url: '/staff/getposition',
      method: 'post',
      data: `u_username=${username}`
    })
  },
  
  // 新增 getUser 方法
  getUser(username) {
    return service({
      url: '/staff/getuser',
      method: 'post',
      data: `u_username=${username}`
    })
  },
  resetPassword(data) {
    return service({
      url: '/staff/reset',
      method: 'put',
      data: `u_username=${data.username}&u_password=${data.newPassword}`
    })
  }
}

export default api